查看原文
其他

堆溢出 —— unlink | PWN

NOP Team NOP Team 2023-07-11

前几天,我们发了一篇 Ubuntu 16.04 配置 pwn 环境的文章,遭到了部分朋友的反感,他们认为我们不应该写这么基础的东西,甚至有几个朋友怒而取关了

其实那篇文章就是为了这个视频来做铺垫的,免得一些兄弟原理懂了,实践不了

所以,如果这个视频有帮助到各位,帮我们转发转发,告知一下取关的几位朋友,都是误会嗷

【B站在线观看】

https://www.bilibili.com/video/BV1uF41177YY?share_source=copy_web

【视频、图示以及文档下载地址】

https://pan.baidu.com/s/1Ps2uKajjLP6s6rqzepZEXw 提取码: 1udc

下面是视频中的 markdown 文档,方便大家学习和复制


unlink 漏洞

堆基础知识

  • Linux堆内存管理深入分析上

    https://introspelliam.github.io/2017/09/10/pwn/Linux%E5%A0%86%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90%E4%B8%8A/

  • Linux堆内存管理深入分析下

    https://introspelliam.github.io/2017/09/15/pwn/Linux%E5%A0%86%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90%E4%B8%8B/

unlink 知识

  • wooyun-drops_Linux堆溢出漏洞利用之unlink

    https://wooyun.js.org/drops/Linux%E5%A0%86%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%E4%B9%8Bunlink.html

  • wooyun-drops_堆溢出的unlink利用方法

    https://wooyun.js.org/drops/%E5%A0%86%E6%BA%A2%E5%87%BA%E7%9A%84unlink%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95.html

  • ctf-wiki_unlink

    https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/implementation/basic/?h=unlink#unlink

  • [Unlink] 2014-HITCON-stkof | LiuLian

    http://liul14n.top/2020/02/03/Unlink-2014-HITCON-stkof/

内存分布图

系统内存分布图

malloc & mmap

free

chunk 的结构

  • allocated chunk;
img
  • free chunk;
img

bins

  • fastbins  0x10-0x80
  • bins
    • unsorted bins
    • small bins
    • large bins
img

感受 bins

magicheap

https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_magicheap

  • fastbins 范围
  • small bins
  • large bins
  • free_unlink
  • unsortedbins
  • fd
  • bk
  • top_chunk

unlink


/*unlink操作的实质就是:将P所指向的chunk从双向链表中移除,这里BK与FD用作临时变量*/#define unlink(P, BK, FD) { \ B = P->fd; \ A = P->bk; \ B->bk = A; \ A->fd = B; \ ...}

img

unlink 问题分析

glibc 无法识别 chunk 结构

B->bk != P || A->fd != P P -> fd = *P - 0x18P -> bk = *P - 0x10
B -> bk = *P - 0x18 + 0x18 = *PA -> fd = *P - 0x10 + 0x10 = *P B = P->fd; \A = P->bk;
B->bk = A; \*P = *P - 0x10
A->fd = B;*P = *P - 0x18

unlink 漏洞结果

我们可以向某一个内存地址写入一些内容

解决一些问题

  • 伪造fd, bk
  • *P  0x6020c8
  • system() 的地址 通过show函数来获取

例题

hitconTraining_unlink——bamboobox

https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_unlink


往期文章


2022 年 Ubuntu 16.04 配置 pwn 环境的一些小问题

从一道 CTF 题看 SROP | PWN

BROP 攻击技术 | PWN

cdb执行shellcode(免杀) | 红队攻防

数据库连接利用工具——Sylas | 红队攻防


有态度,不苟同


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存